#ifndef GRAMMAR_SCANNER_H
#define GRAMMAR_SCANNER_H

#include <fstream>
#include <algorithm>
#include "rules.h"
#include "states.h"
#include "rules_utilities.h"
#include "types.h"

    /* Лексичний аналізатор запису правил граматики синтаксичних конструкцій мови
      програмування з подальшим зберіганням правил для кожного NT-символа */

class GrammarScanner {
    std::vector<Rules> rules;
    void __removeRepeatNTSymbol(); // видаляє з правил "символ-повторювач" та встановлює флаг repeat_itself для символа перед яким
                                  // знаходився "символ-повторювач"
public:
    GrammarScanner();
    int startScanner(const char*); // відкриває файл з граматикою та аналізує його. Результат записує в структури Rules
    const std::vector<Rules> &getGrammarRules() // повертає зчитані правила граматики
    {
        return rules;
    }
};

#endif // GRAMMAR_SCANNER_H
